1529C - Parsa's Humongous Tree - CodeForces Solution


dfs and similar dp graphs greedy trees *1600

Please click on ads to support us..

C++ Code:

// time-limit: 1000
// problem-url: https://codeforces.com/contest/1529/problem/C
#include "bits/stdc++.h"
using namespace std;

typedef long long ll;

const int MAXN=2e5;
vector<int> adj[MAXN];
vector<pair<ll,ll>> lim;
ll dp1[MAXN], dp2[MAXN];

void dfs(int u, int p) {
	auto [l,r]=lim[u];

	ll sum1=0,sum2=0;
	for (int v : adj[u]) {
		if (v==p) continue;
		auto [l2,r2]=lim[v];
		dfs(v,u);
		sum1+=max(dp1[v]+abs(l-l2),dp2[v]+abs(l-r2));
		sum2+=max(dp1[v]+abs(r-l2),dp2[v]+abs(r-r2));
	}

	dp1[u]=sum1;
	dp2[u]=sum2;
}

signed slv() {
	int n; cin >> n;
	lim.clear();
	for (int i = 0; i < n; i++) {
		ll l, r; cin >> l >> r;
		lim.push_back({l,r});
	}

	for (int i = 0; i < n; i++) adj[i].clear();
	for (int i = 1; i < n; i++) {
		int u, v; cin >> u >> v; --u,--v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}

	dfs(0,0);
	cout << max(dp1[0],dp2[0]) << '\n';
	return 0;
}

signed main() {
	ios::sync_with_stdio(0); cin.tie(0);
	int t = 1;
	cin >> t;
	while(t--) slv();
	return 0;
}


Comments

Submit
0 Comments
More Questions

622. Design Circular Queue
814. Binary Tree Pruning
791. Custom Sort String
787. Cheapest Flights Within K Stops
779. K-th Symbol in Grammar
701. Insert into a Binary Search Tree
429. N-ary Tree Level Order Traversal
739. Daily Temperatures
647. Palindromic Substrings
583. Delete Operation for Two Strings
518. Coin Change 2
516. Longest Palindromic Subsequence
468. Validate IP Address
450. Delete Node in a BST
445. Add Two Numbers II
442. Find All Duplicates in an Array
437. Path Sum III
436. Find Right Interval
435. Non-overlapping Intervals
406. Queue Reconstruction by Height
380. Insert Delete GetRandom O(1)
332. Reconstruct Itinerary
368. Largest Divisible Subset
377. Combination Sum IV
322. Coin Change
307. Range Sum Query - Mutable
287. Find the Duplicate Number
279. Perfect Squares
275. H-Index II
274. H-Index